
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.regex.Pattern;


public class Graphe {
	 int _nbrSommet;
	 int _nbrArret;
	 int _capacite;
	 int _tempsGlobal;
	 ArrayList<Sommet> _sommets;


	public void charger( String fichier) throws FileNotFoundException
	{
		int nbrVois,numVois, distance;

		//Ouverture du Fichier
		Scanner scanner=new Scanner(new File(fichier));
			
		scanner.useDelimiter(Pattern.compile("[,\\s]"));
		while (scanner.hasNextLine()) 
		{
			_nbrSommet  = scanner.nextInt();
			_capacite  = scanner.nextInt();
			_tempsGlobal = scanner.nextInt();

			nbrVois = _nbrSommet-1;
			_nbrArret=_nbrSommet*nbrVois;

			this._sommets= new ArrayList<Sommet>(_nbrSommet);
			for(int i=0; i<_nbrSommet; i++)
			{
				if(i == 0)
					_sommets.add(new Sommet(i+1,_nbrSommet-1,0));
				else
					_sommets.add(new Sommet(i+1,_nbrSommet-1,1000));
			}
			for(int i=0; i<_nbrSommet; i++)
			{
				_sommets.get(i).set_demande(scanner.nextInt());
				_sommets.get(i)._liste.set_nbVoisin(nbrVois);
				for(int j=0;j<nbrVois;j++)
				{ 
					numVois = scanner.nextInt();
					distance = scanner.nextInt();
					_sommets.get(i)._liste._list.add( new Arete(i+1,numVois,distance));
					/*System.out.println(_sommets.size());
				/	if(!_sommets.get(numVois)._liste.existe(i+1))
					{
						_sommets.get(numVois)._liste._list.add(new Arete(numVois,i+1,distance));
					}*/
				}
			}
		}
		scanner.close();
	}
	public Graphe() {
		// TODO Auto-generated constructor stub
	}
	public int get_nbrSommet() {
		return _nbrSommet;
	}
	public void set_nbrSommet(int _nbrSommet) {
		this._nbrSommet = _nbrSommet;
	}
	public int get_nbrArret() {
		return _nbrArret;
	}
	public void set_nbrArret(int _nbrArret) {
		this._nbrArret = _nbrArret;
	}
	public int get_capacite() {
		return _capacite;
	}
	public void set_capacite(int _capacite) {
		this._capacite = _capacite;
	}
	public int get_tempsGlobal() {
		return _tempsGlobal;
	}
	public void set_tempsGlobal(int _tempsGlobal) {
		this._tempsGlobal = _tempsGlobal;
	}	
	public void set_sommets(ArrayList<Sommet> _sommets) {
		this._sommets = _sommets;
	}
	public ArrayList<Sommet> get_sommets() {
		return _sommets;
	}
	@Override
	public String toString() {
		return "Graphe [_nbrSommet=" + _nbrSommet + ", _nbrArret=" + _nbrArret + ", _capacite=" + _capacite + ", _tempsGlobal=" + _tempsGlobal+ "]\n" + _sommets;
	}
	public int[] voisins(int next) {
		int n=0,res[] = new int[this._nbrSommet-1];
		Iterator<Arete> i = _sommets.get(next)._liste._list.iterator();
		while(i.hasNext())
		{
			Arete a = (Arete) i.next();
			res[n]=a.get_numVoi();
		}
		return res;
	}
	public int poids(int next, int v) {
		
		return (int) _sommets.get(next)._liste._list.get(_sommets.get(next)._liste.index(v)).get_distance();
	}
	public int getIndexSommet(int n)
	{
		for(int i=0;i<this._nbrSommet;i++)
			if(this._sommets.get(i).get_numSommet() == n)
				return i;
		return -1;
	}
	
	
}
